<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
        // 第一题

        // function Grand() {}  //爷爷
        // function Parent() {} //爸爸
        // Grand.prototype.tskill = '拉二胡';
        // var grand = new Grand();

        // Parent.prototype.tskill = '弹琴';
        // var parent = new Parent();

        
        // console.log(grand.tskill); // 爷爷
        // console.log(parent.tskill);// 爸爸

        
        //1. 分别使用call，apply为obj添加name，age属性
        // function Test(name,age){
        // this.name = name;
        // this.age = age;
        // }
        // obj = {};
        // Test.call(obj,'张三',18);

        // Test.apply(obj,['李四',19])
        // console.log(obj);


        // 2.实现陈鹏买车，其中有sayHi方法，功能:打印'陈鹏买了一辆红色的2.0宝马车'
        // function Car(brand,color,displasement){
        //     this.brand = brand;
        //     this.color = color;
        //     this.displasement = displasement;

        // }
        // function Person(name){
        //     this.name = name;
        // }
        // Person.prototype = new Car('宝马','红色',2.0);
        // Person.prototype.sayHi = function(){console.log(this.name+'买了一辆'+this.color+'の'+this.brand+'车'); }
        // var person = new Person('陈鹏');
        // person.sayHi();


    

        // 3.父类Shape （属性有:name,length,width,方法有:Intro 我是XX形）

        // 子类： Circle(属性有:r)

        // 分别使用 原型链继承 构造函数继承 圣杯继承
        // 原型链继承
        // function Shape(name,length,width){
        //     this.name = name;
        //     this.length = length;
        //     this.width = width;
        // }
        // function Circle(r){
        //     this.r = r;
        // }
        // Shape.prototype.Intro = function(){
        //     console.log('我是'+this.name);
        // }
        // var shape = new Shape('正方形',10,10);
        // Circle.prototype = shape;
        // var circle = new Circle(5);
        // circle.Intro();

        //构造函数继承
        // function Shape(name,length,width){
        //     this.name = name;
        //     this.length = length;
        //     this.width = width;
        //     this.Intro = function(){
        //     console.log('我是'+this.name);
        //     }
        // }
        // function Circle(name,length,width,r){
        //     Shape.call(this,name,length,width);
        //     this.r = r;
        // }
        // var circle = new Circle('正方形',10,10,5);
        // circle.Intro();

        //圣杯继承
        function Shape(name,length,width){ 
            this.name = name;
            this.length = length;
            this.width = width;
        }
        Shape.prototype.Intro = function(){
            console.log('我是'+this.name);
        }
        
        function Circle(r){
            this.r = r;
        }
        
        function inherto(Target,Origin){
            function TempFunc(){}
            TempFunc.prototype = Origin.prototype;
            var tempfunc = new TempFunc();
            Target.prototype = tempfunc;
            Target.prototype.constructor = Target; // 归为
            Target.prototype.uber = Origin; // 超类
                       
        }
        
        inherto(Circle,Shape);
        var shape = new Shape('正方形',10,10);
        Circle.prototype = shape;
        var circle = new Circle(5);
        circle.Intro();



       
    </script>
</body>
</html>